package com.ruoyi.web.service;

import com.ruoyi.web.dto.ComplainImportDTO;
import com.ruoyi.web.entity.BlackBaseInfo;
import com.ruoyi.web.entity.BlackComplainDetail;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

public interface BlackCaseService {
    // 查询列表
    Map<String, Object> listBlackCase(Map<String, Object> params);
    
    // 查询详情
    Map<String, Object> getBlackCase(String id);
    
    // 添加案件
    Map<String, Object> addBlackCase(Map<String, Object> params) throws Exception;
    
    // 更新案件
    Map<String, Object> updateBlackCase(Map<String, Object> params) throws Exception;
    
    // 导出Excel
    void exportToExcel(HttpServletResponse response, Map<String, Object> params) throws Exception;

    // 新增的方法
    /**
     * 导入投诉详情
     * @param file Excel文件
     * @param createBy 创建人
     * @return 错误信息列表
     */
    List<String> importComplainDetails(MultipartFile file, String createBy);

    /**
     * 获取导出数据
     * @param params 查询参数
     * @return 投诉详情列表
     */
    List<ComplainImportDTO> getComplainDetailsForExport(Map<String, Object> params);

    /**
     * 批量更新投诉详情
     * @param complainDetails 投诉详情列表
     */
    void batchUpdateComplainDetails(List<BlackComplainDetail> complainDetails);

    /**
     * 批量删除投诉详情
     * @param ids ID列表
     */
    void batchDeleteComplainDetails(List<String> ids);

    /**
     * 查询投诉信息列表
     * @param params 查询参数
     * @return 查询结果
     */
    Map<String, Object> listComplainDetails(Map<String, Object> params);

    /**
     * 更新投诉信息
     * @param complainDetail 投诉详情
     */
    void updateComplainDetail(BlackComplainDetail complainDetail);

    /**
     * 批量关联投诉信息
     * @param baseIds 基础ID列表
     * @param complainDetail 投诉信息
     */
    void batchAssociateComplain(List<String> baseIds, Map<String, Object> complainDetail, String createBy);

    /**
     * 录入单条投诉记录
     * @param detail 投诉记录
     */
    void addComplaint(BlackComplainDetail detail);

    /**
     * 远程搜索公司名称
     * @param keyword 公司名称关键字
     * @param companyType 公司类型
     * @param companyLegalName 法人名称
     * @param companyCity 公司所在城市
     * @return 搜索结果列表
     */
    List<BlackBaseInfo> remoteSearchByCompanyName(String keyword, String companyType,
                                                  String companyLegalName, String companyCity);

    /**
     * 远程搜索法人名称
     * @param keyword 法人名称关键字
     * @param companyName 公司名称
     * @param companyType 公司类型
     * @param companyCity 公司所在城市
     * @return 搜索结果列表
     */
    List<BlackBaseInfo> remoteSearchByLegalName(String keyword, String companyName, 
                                               String companyType, String companyCity);

    /**
     * 远程搜索投诉人名称
     */
    List<BlackComplainDetail> remoteSearchByComplainName(String keyword, String cityCode, 
                                                        String complainSource, String complainStatus);
} 